

#ifndef UC_GEEXTSF_H
#define UC_GEEXTSF_H

#include "zgegbl.h"
#include "zgesurf.h"
#pragma pack (push, 8)

class UcGePlane;
class UcGeCylinder;
class UcGeCone;
class UcGeSphere;
class UcGeTorus;
class UcGeNurbSurface;
class surface;

class
GX_DLLEXPIMPORT
UcGeExternalSurface : public UcGeSurface
{
public:
   UcGeExternalSurface();
   UcGeExternalSurface(void* surfaceDef, UcGe::ExternalEntityKind surfaceKind,
                       ZSoft::Boolean makeCopy = ZSoft::kTrue);
   UcGeExternalSurface(const UcGeExternalSurface&);

   void getExternalSurface(void*& surfaceDef) const;

   UcGe::ExternalEntityKind  externalSurfaceKind() const;

   ZSoft::Boolean    isPlane      () const;
   ZSoft::Boolean    isSphere     () const;
   ZSoft::Boolean    isCylinder   () const;
   ZSoft::Boolean    isCone       () const;
   ZSoft::Boolean    isTorus      () const;
   ZSoft::Boolean    isNurbSurface() const;
   ZSoft::Boolean    isDefined    () const;

   ZSoft::Boolean isNativeSurface(UcGeSurface*& nativeSurface) const;

   UcGeExternalSurface& operator = (const UcGeExternalSurface& src);

   UcGeExternalSurface& set(void* surfaceDef,
                            UcGe::ExternalEntityKind surfaceKind,
                            ZSoft::Boolean makeCopy = ZSoft::kTrue);

   ZSoft::Boolean       isOwnerOfSurface    () const;
   UcGeExternalSurface& setToOwnSurface     ();
};

#pragma pack (pop)
#endif
